package rkdwogus7.swing;

import java.awt.BorderLayout;
import java.awt.FlowLayout;

import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.border.EmptyBorder;
import javax.swing.GroupLayout;
import javax.swing.GroupLayout.Alignment;

import java.awt.Dimension;

import javax.swing.JLabel;
import javax.swing.border.LineBorder;
import javax.swing.filechooser.FileNameExtensionFilter;

import java.awt.Color;

import javax.swing.LayoutStyle.ComponentPlacement;
import javax.swing.JTextField;

import rkdwogus7.dao.GalleryDAO;

import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.image.BufferedImage;
import java.io.File;

public class ProcessImage extends JDialog {

	private final JPanel contentPanel = new JPanel();
	private JTextField regName;
	private JTextField showName;

	/**
	 * Launch the application.
	 */
	public static void main(String[] args) {
		try {
			ProcessImage dialog = new ProcessImage();
			dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
			dialog.setVisible(true);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * Create the dialog.
	 */
	public ProcessImage() {
		setTitle(" :: 이미지처리 :: ");
		setBounds(100, 100, 640, 480);
		getContentPane().setLayout(new BorderLayout());
		contentPanel.setBorder(new EmptyBorder(5, 5, 5, 5));
		getContentPane().add(contentPanel, BorderLayout.CENTER);
		contentPanel.setLayout(new BorderLayout(0, 0));
		{
			JPanel regPhoto = new JPanel();
			regPhoto.setPreferredSize(new Dimension(250, 10));
			contentPanel.add(regPhoto, BorderLayout.WEST);
			
			final JLabel regImg = new JLabel("");
			regImg.setBorder(new LineBorder(Color.LIGHT_GRAY));
			regImg.setPreferredSize(new Dimension(200, 180));
			
			JButton regBtn = new JButton("사진등록");
			regBtn.addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent e) {
					// 아이디 등록창에 입력값이 없으면 경고 표시
					if (regName.getText().isEmpty()) {
						JOptionPane.showMessageDialog(null, "사진등록시 아이디를 입력하세요");
						return;
					}
					// 사진등록 - 이미지만 처리하기 위해 이미지 파일의 확장자를 필터로 등록 
					FileNameExtensionFilter fillter = 
							new FileNameExtensionFilter("이미지 파일들", "png", "jpg", "gif");
					// 사용자가 이미지를 선택할 수 있도록 파일열기 대화상자 객체 생성
					JFileChooser fc = new JFileChooser();
					// 대화상자에 필터 등록
					fc.setFileFilter(fillter);
					// 파일 열기 대화상자를 화면에 띄우고 선택한 작업내용을 choice에 저장
					int choice = fc.showOpenDialog(ProcessImage.this);
					// 대화상자에서 이미지를 선택하고 열기 버튼을 클릭했다면
					if ( choice == JFileChooser.APPROVE_OPTION ) {
						// 선택한 이미지의 전체 경로를 알아냄
						String img = fc.getSelectedFile().getPath();
						// 경로가 너무 길기 때문에 새로운 객체로 선언
						String myPhoto = fc.getSelectedFile().getName();
						// 선택한 이미지를 특정 장소에 저장하기 위해 이미지 저장 위치를 경로로 지정
						String savePath = "c:/Java/myPhoto/" + myPhoto;
						// 선택한 이미지를 지정한 경로에 생성하기 위해 BufferedImage 객체 이용
						BufferedImage image = null;
						try {
							// 원본 이미지를 File 객체로 읽어옴
							File origin = new File( img );
							// File 객체로 지정한 이미지 파일을 ImageIO 객체를 이용하여 메모리로 읽어옴
							image = ImageIO.read(origin);
							// 메모리로 읽어온 이미지 내용을 지정한 위치에 지정한 형식으로 저장
							ImageIO.write(image, "png", new File(savePath));
						} catch (Exception ex) {
						}
						// Galleryv1 테이블에 등록한 이미지 저장
						if (GalleryDAO.insertPhoto( regName.getText(), myPhoto ) > 0 ) {
							JOptionPane.showMessageDialog(null, "이미지 등록 완료!");
						}
						
						
						// JLabel에 이미지 출력
						regImg.setIcon(new ImageIcon(savePath));
						// regImg final로 지정해 주어야 해.
					} // if
				} // actionperformed
			});
			
			regName = new JTextField();
			regName.setColumns(10);
			GroupLayout gl_regPhoto = new GroupLayout(regPhoto);
			gl_regPhoto.setHorizontalGroup(
				gl_regPhoto.createParallelGroup(Alignment.LEADING)
					.addGroup(gl_regPhoto.createSequentialGroup()
						.addGroup(gl_regPhoto.createParallelGroup(Alignment.LEADING)
							.addGroup(gl_regPhoto.createSequentialGroup()
								.addContainerGap()
								.addComponent(regImg, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
							.addGroup(gl_regPhoto.createSequentialGroup()
								.addGap(51)
								.addComponent(regName, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
							.addGroup(gl_regPhoto.createSequentialGroup()
								.addGap(72)
								.addComponent(regBtn)))
						.addContainerGap(38, Short.MAX_VALUE))
			);
			gl_regPhoto.setVerticalGroup(
				gl_regPhoto.createParallelGroup(Alignment.LEADING)
					.addGroup(gl_regPhoto.createSequentialGroup()
						.addGap(23)
						.addComponent(regImg, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
						.addPreferredGap(ComponentPlacement.RELATED, 44, Short.MAX_VALUE)
						.addComponent(regName, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
						.addGap(27)
						.addComponent(regBtn)
						.addGap(80))
			);
			regPhoto.setLayout(gl_regPhoto);
		}
		
		JPanel showPhoto = new JPanel();
		showPhoto.setPreferredSize(new Dimension(250, 10));
		contentPanel.add(showPhoto, BorderLayout.EAST);
		
		final JLabel showImg = new JLabel("");
		showImg.setPreferredSize(new Dimension(200, 180));
		showImg.setBorder(new LineBorder(Color.LIGHT_GRAY));
		
		JButton showBtn = new JButton("사진보기");
		showBtn.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				if (showName.getText().isEmpty()) {
					JOptionPane.showMessageDialog(null, "사진을 보시려면 아이디를 입력하세요");
					return;
				}
				// String imgPath = "c:/Java/myPhoto/suji2.jpg"; // 값을 지정해 둔 경우
				String imgPath = "c:/Java/myPhoto/" + GalleryDAO.selectOnePhoto(showName.getText());
				// DB에서 가져올 경로
				showImg.setIcon( new ImageIcon( imgPath ) );
			}
		});
		
		showName = new JTextField();
		showName.setColumns(10);
		GroupLayout gl_showPhoto = new GroupLayout(showPhoto);
		gl_showPhoto.setHorizontalGroup(
			gl_showPhoto.createParallelGroup(Alignment.LEADING)
				.addGroup(gl_showPhoto.createSequentialGroup()
					.addGroup(gl_showPhoto.createParallelGroup(Alignment.LEADING)
						.addGroup(gl_showPhoto.createSequentialGroup()
							.addContainerGap()
							.addComponent(showImg, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
						.addGroup(gl_showPhoto.createSequentialGroup()
							.addGap(51)
							.addComponent(showName, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
						.addGroup(gl_showPhoto.createSequentialGroup()
							.addGap(70)
							.addComponent(showBtn)))
					.addContainerGap(38, Short.MAX_VALUE))
		);
		gl_showPhoto.setVerticalGroup(
			gl_showPhoto.createParallelGroup(Alignment.LEADING)
				.addGroup(gl_showPhoto.createSequentialGroup()
					.addGap(23)
					.addComponent(showImg, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
					.addPreferredGap(ComponentPlacement.RELATED, 44, Short.MAX_VALUE)
					.addComponent(showName, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
					.addGap(28)
					.addComponent(showBtn)
					.addGap(79))
		);
		showPhoto.setLayout(gl_showPhoto);
		{
			JPanel buttonPane = new JPanel();
			buttonPane.setLayout(new FlowLayout(FlowLayout.RIGHT));
			getContentPane().add(buttonPane, BorderLayout.SOUTH);
			{
				JButton okButton = new JButton("OK");
				okButton.setActionCommand("OK");
				buttonPane.add(okButton);
				getRootPane().setDefaultButton(okButton);
			}
			{
				JButton cancelButton = new JButton("Cancel");
				cancelButton.setActionCommand("Cancel");
				buttonPane.add(cancelButton);
			}
		}
	}
}
